// @ts-ignore
/* eslint-disable */
import { request } from 'umi';
import OSS from 'ali-oss';
import { v4 as uuidv4 } from 'uuid';

/** 获取阿里云OSS config GET /api/oss-ticket */
export async function getOssSTS() {
  return request<API.AliOssSTS>('/api/oss-ticket', {
    method: 'GET',
  });
}
const initOSS = (): Promise<any> => {
  return new Promise(async (resolve) => {
    const { data } = await getOssSTS();
    const client = new OSS({
      // yourRegion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
      region: 'oss-cn-chengdu',
      // 从STS服务获取的临时访问密钥（AccessKey ID和AccessKey Secret）。
      accessKeyId: data.Credentials.AccessKeyId,
      accessKeySecret: data.Credentials.AccessKeySecret,
      // 从STS服务获取的安全令牌（SecurityToken）。
      stsToken: data.Credentials.SecurityToken,
      refreshSTSToken: async () => {
        // 向您搭建的STS服务获取临时访问凭证。
        const info = await getOssSTS();
        return {
          accessKeyId: info.data.Credentials.AccessKeyId,
          accessKeySecret: info.data.Credentials.AccessKeySecret,
          stsToken: info.data.Credentials.SecurityToken,
        };
      },
      // 刷新临时访问凭证的时间间隔，单位为毫秒。
      refreshSTSTokenInterval: 300000,
      // 填写Bucket名称。
      bucket: 'ybk-fund-store',
      secure: true,
    });
    resolve(client);
  });
};

export const AliOssUploadFile = async (options: any) => {
  const { onSuccess, onError, file } = options;
  try {
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    // 您可以通过自定义文件名（例如exampleobject.txt）或文件完整路径（例如exampledir/exampleobject.txt）的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
    // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
    const client = await initOSS();

    const date = new Date();
    const year = date.getFullYear().toString();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const suffix = file.name.substring(file.name.lastIndexOf('.'));

    const filePath = `zhonghui/file/${year}${month}${day}/${uuidv4()}${suffix}`;
    const result = await client.put(filePath, file);
    onSuccess(result);
  } catch (e) {
    onError(e);
  }
};
